package cn.tedu.csmall.stock.webapi.quartz;

import org.quartz.*;
import org.quartz.impl.JobDetailImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

// 因为我们添加的依赖包含了Quartz的调度器,已经在Spring容器中,所以我们要想设置的触发生效
// 必须将这些配置添加Spring中,这样Spring容器中的Quartz的调度器才能识别接收到
@Configuration
public class QuartzConfig {

    // 创建一个JobDetail对象,描述我们要运行的job(任务),保存到Spring容器中
    // 方法名无要求
    @Bean
    public JobDetail showDate(){
        System.out.println("showDate运行");
        return JobBuilder.newJob(QuartzJob.class) // 绑定要运行的任务类
                .withIdentity("date")             // 定义这个工作的名称
                .storeDurably()
                .build();
    }

    // 声明一个方法返回Trigger,Trigger中定义什么时候执行哪个方法
    @Bean
    public Trigger showDateTrigger(){
        System.out.println("showDateTrigger运行");
        // 定义Cron表达式
        CronScheduleBuilder cronScheduleBuilder =
                CronScheduleBuilder.cronSchedule("0/10 * * * * ? ");
        return TriggerBuilder.newTrigger()
                .forJob(showDate())  // 绑定jobDetail
                .withIdentity("dataTrigger")  //起名字
                .withSchedule(cronScheduleBuilder)  //绑定cron表达式
                .build();
    }

    @Bean
    public JobDetail addStock(){
        return JobBuilder.newJob(QuartzStock.class) // 绑定要运行的任务类
                .withIdentity("addStock")             // 定义这个工作的名称
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger addStickTrigger(){
        // 定义Cron表达式
        CronScheduleBuilder cronScheduleBuilder =
                CronScheduleBuilder.cronSchedule("0/10 * * * * ? ");
        return TriggerBuilder.newTrigger()
                .forJob(addStock())  // 绑定jobDetail
                .withIdentity("addStickTrigger")  //起名字
                .withSchedule(cronScheduleBuilder)  //绑定cron表达式
                .build();
    }
}
